package com.crawler.util.template;

import lombok.Data;

/**
 * 定义：模版相似度，在模版串中存在三种串（常量串111、数字占位符11、全量占位符1），认为常量串的相似度最大，其次是数字占位符，然后是全量占位符
 * 假设URL分段长度可以达到10，则在匹配的情况下，需要保证10个数字占位符的级别，小于1个常量串
 * <p>
 * <p>
 * 基于URL模版进行匹配的结果对象,对于给定URL，可能存在多种匹配
 * 例如：有URL：http://legal.firefox.news.cn:8080/aa
 * /15/0612/10/C3X7FA9OHNGUTY21.html?aaa=123#vvv
 * 存在模版1：legal.firefox.news.cn/aa/[d]/[d]/[d]/C3X7FA9OHNGUTY21.html
 * 模版2：legal.firefox.news.cn/aa/[d]/[d]/[d]/[*].html
 * 模版3：legal.firefox.news.cn/[*]/[d]/[d]/[d]/[*].html
 * <p>
 * 现输入为： 1.
 * http://legal.firefox.news.cn:8080/aa/15/0612/10/C3X7FA9OHNGUTY21.html
 * 对于三个模版的匹配值，分别为：255、145、35
 * <p>
 * 2. http://legal.firefox.news.cn:8080/bb/15/0612/10/C3X7FA9OHNGUTY21.html
 * 对于三个模版的匹配值，分别为：-1、-1、35
 * <p>
 *
 * @author p
 * @date 2015/6/15
 */
@Data
public class MatchResult implements Comparable<MatchResult> {
    /**
     * 匹配值
     */
    private int value;

    private URLTemplate matchTemplate;

    public MatchResult(int value, URLTemplate matchTemplate) {
        this.value = value;
        this.matchTemplate = matchTemplate;
    }

    @Override
    public int compareTo(MatchResult result) {
        return getValue() > result.getValue() ? -1 : 1;
    }

    public boolean isNotMatch() {
        return this.value == URLTemplate.NOT_MATCH;
    }

    @Override
    public String toString() {
        return "MatchResult [value=" + value + ", matchTemplate=" + matchTemplate + "]";
    }
}
